package com.c3w.synchro.common.validation;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * User: P. Lalonde
 * Date: 12-05-30
 */
public class ValidationResult {
    private final Map<String, Collection<String>> validationResult = new HashMap<>();

    /**
     * Création d'un résultat de validation vide.
     */
    public ValidationResult() {
    }

    /**
     * Permet la création d'un résultat de validation avec une seule erreur.
     *
     * @param fieldName    Le nom du champ.
     * @param errorMessage L'erreur.
     */
    public ValidationResult(String fieldName, String errorMessage) {
        add(fieldName, errorMessage);
    }

    /**
     * Ajout d'une erreur pour un champ donné.
     *
     * @param fieldName    Le nom du champ invalide.
     * @param errorMessage Le message d'erreur.
     */
    public void add(String fieldName, String errorMessage) {
        Collection<String> errors = validationResult.get(fieldName);

        if (errors == null) {
            errors = new ArrayList<>();
            validationResult.put(fieldName, errors);
        }

        errors.add(errorMessage);
    }

    /**
     * @param fieldName Le nom du champ pour lequel on cherche les erreurs.
     * @return La liste des erreurs.
     */
    public Collection<String> getErrors(String fieldName) {
        return validationResult.get(fieldName);
    }

    /**
     * Valide si un champ est en erreur.
     *
     * @param fieldName Le nom du champ.
     * @return true si en erreur, sinon false.
     */
    public boolean isValid(String fieldName) {
        return !validationResult.containsKey(fieldName);
    }

    /**
     * @return Le nombre de champ en erreur.
     */
    public int getErrorCount() {
        return validationResult.keySet().size();
    }

    /**
     * @return La liste des champs en erreur.
     */
    public Collection<String> getFieldNames() {
        return validationResult.keySet();
    }

    @Override
    public String toString() {
        return "ValidationResult{" +
                "validationResult=" + validationResult +
                '}';
    }
}
